🛠️ macOS 修改 SSH 默认端口 (22) 的正确姿势

头像
2025年09月16日

在 macOS 上,我们有时需要修改 SSH 的默认端口(22),常见原因包括: 端口冲突:例如使用了 OrbStack、GitLab Runner 等工具占用了本地的 22 端口。 安全需求:为了避免被公网扫描,希望更改为非标准端口(如 2222)。

# MacOS # SSH # 端口配置
🛠️ macOS 修改 SSH 默认端口 (22) 的正确姿势

1. 问题背景

在 macOS 上,我们有时需要修改 SSH 的默认端口(22),常见原因包括:

  • 端口冲突:例如使用了 OrbStack、GitLab Runner 等工具占用了本地的 22 端口。
  • 安全需求:为了避免被公网扫描,希望更改为非标准端口(如 2222)。

2. ⚠️ 常见的“错误”姿势(为什么 Linux 的方法无效?)

在 Linux 上,我们通常直接修改 /etc/ssh/sshd_config 中的 Port 即可。但在 macOS 上,这种方法通常无效

  • ❌ 修改 /etc/ssh/sshd_config
    • 原因:macOS 的 SSH 服务是由 launchd 托管的。launchd 会先监听端口,收到请求后再启动 sshd 进程。因此,仅修改 sshd 的配置文件无法改变 launchd 监听的入口端口。
  • ❌ 修改 /System/Library/LaunchDaemons/ssh.plist
    • 原因:这是系统核心文件,受 SIP (系统完整性保护) 保护。即使你使用 sudo 甚至关闭 SIP,修改这个文件都非常麻烦且容易被系统更新覆盖。

3. ✅ 正确姿势:修改系统服务映射

在 macOS 上,最简单且持久的修改方法是直接修改系统服务列表中的 SSH 端口映射。

第一步:修改 /etc/services

我们需要修改系统对 “ssh” 服务定义的默认端口。

  1. 打开终端,使用 vim 编辑服务配置文件:

    sudo vim /etc/services
    
  2. 输入 /ssh 并回车,搜索 SSH 相关的定义。

  3. 找到以下两行(通常在文件的开头部分):

    ssh              22/udp     # SSH Remote Login Protocol
    ssh              22/tcp     # SSH Remote Login Protocol
    
  4. i 进入编辑模式,将 22 修改为你想要的端口(例如 2222):

    ssh              2222/udp     # SSH Remote Login Protocol
    ssh              2222/tcp     # SSH Remote Login Protocol
    
  5. Esc 退出编辑模式,输入 :wq 保存并退出。

第二步:重启 SSH 服务

修改完成后,需要重启系统服务以让 launchd 重新读取配置。

请依次执行以下命令:

# 1. 停止 SSH 服务 (卸载配置)
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist

# 2. 启动 SSH 服务 (重新加载配置)
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist

(注:如果不熟悉命令,重启电脑也能达到同样的效果)


4. 验证结果

修改完成后,你可以尝试通过新的端口连接本地进行测试:

# 使用 -p 指定新端口
ssh localhost -p 2222

如果能看到登录提示或成功登录,说明修改成功。


💡 补充说明:修改其他 SSH 配置

虽然修改端口不能用 sshd_config,但其他 SSH 配置(如禁止密码登录、允许 Root 登录等)依然是遵循标准方式的。

  • 修改方式:直接编辑 /etc/ssh/sshd_config
  • 生效方式:修改后同样运行上面的 launchctl unload/load 命令重启服务即可生效。